package cn.funeralobjects.upms.repository;

import cn.funeralobjects.upms.entity.EApiRole;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.Collection;
import java.util.List;

/**
 * ApiRole的数据接口
 *
 * @author FuneralObjects
 * Create date: 2020/4/26 3:37 PM
 */
public interface ApiRoleRepository extends JpaRepository<EApiRole, EApiRole> {

    /**
     * 通过角色id 过滤出符合条件的apiId
     *
     * @param roleId 角色ID
     * @param apiIds apiId集合
     * @return 符合条件的apiId集合
     */
    @Query("SELECT apiId FROM EApiRole WHERE roleId = :roleId AND apiId in :apiIds")
    List<Integer> filterApiByRole(Integer roleId, Collection<Integer> apiIds);

    /**
     * 通过ApiId 过滤出符合条件的角色id
     *
     * @param apiId   apiId
     * @param roleIds 角色ID 集合
     * @return 符合条件的角色id集合
     */
    @Query("SELECT roleId FROM EApiRole WHERE apiId = :apiId AND roleId in :roleIds")
    List<Integer> filterRoleByApi(Integer apiId, Collection<Integer> roleIds);

    List<EApiRole> findAllByRoleId(Integer roleId);


//    /**
//     * 通过角色id删除关联关系
//     *
//     * @param roleId 角色id
//     */
//    @Modifying
//    @Query("DELETE FROM EApiRole WHERE roleId = :roleId")
//    void deleteAllByRoleId(Integer roleId);
//

    /**
     * 通过apiId删除关联关系
     *
     * @param apiId apiId
     */
    @Modifying
    @Query("DELETE FROM EApiRole WHERE apiId = :apiId")
    void deleteAllByApiId(Integer apiId);
}
